package itheima01;

import org.junit.Test;

import java.sql.*;

/*
    开发步骤
    1.注册驱动
    2.获得连接.

    3. 获得执行sql语句的对象
        java.sql.Connection接口: 我们拿到的是实现类对象
        成员方法:
            public Statement createStatement() : 创建一个 Statement 对象,用来执行sql语句
            返回值类型:
                java.sql.Statement接口: 必然返回实现类对象,用来执行sql语句的,返回结果
                成员方法:
                   public ResultSet executeQuery(String sql): 执行给定的 SQL 语句，该语句返回单个 ResultSet 对象。
                   返回值:
                        java.sql.ResultSet接口: 返回的是实现类对象,结果集对象,把它当成集合用
                        成员方法:
                            boolean next() : 判断是否有下一条数据,有 : true 没有: false
                            获取String数据:
                                 String getString(int columnIndex): 方法参数指定的是列的编号,从1开始
                                 String getString(String columnName): 方法参数指定的是列名称
                            获取Object数据: 比较通用
                                 Object getObject(int columnIndex): 方法参数指定的是列的编号,从1开始
                                 Object getObject(String columnName): 方法参数指定的是列名称


    JDBC操作数据库步骤
    1.注册驱动
    2.获取连接Connection对象
    3.获取执行SQL语句的Statement对象
    4.Statement对象执行sql语句
    5.关闭资源


 */
public class Demo05JDBC {
    //查询一条记录
    @Test
    public void queryOne() throws Exception {
        //1.注册驱动
        Class.forName("com.mysql.jdbc.Driver");

        //2.获取连接Connection对象
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/day18", "root", "root");

        //3.获取执行SQL语句的Statement对象
        Statement stmt = con.createStatement();

        //定义查询的sql语句
        String sql = "SELECT * FROM scores WHERE sid=1";
        //4.Statement对象执行sql语句,获取结果集
        ResultSet rs = stmt.executeQuery(sql);

        //遍历输出结果集
        while (rs.next()) {
            int sid = rs.getInt(1);//根据列的编号获取
            int score = rs.getInt(2);
            String sname = rs.getString("sname");//根据列名获取
            String sname1 = rs.getString(3);//根据列的编号获取
            System.out.println("编号: "+sid+", 姓名: "+sname+", 成绩: "+score);
        }

        //5.关闭资源
        con.close();
        stmt.close();
        rs.close();
    }
    //查询所有记录
    @Test
    public void queryAll() throws Exception {
        //1.注册驱动
        Class.forName("com.mysql.jdbc.Driver");

        //2.获取连接Connection对象
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/day18", "root", "root");

        //3.获取执行SQL语句的Statement对象
        Statement stmt = con.createStatement();

        //定义查询所有的sql
        String sql = "select * from scores";

        //4.Statement对象执行sql语句
        ResultSet rs = stmt.executeQuery(sql);

        //遍历输出结果集
        while(rs.next()) {
            Object sid = rs.getObject(1);//根据列编号获取值,返回的是Object类型
            Object score = rs.getObject("score");//根据列名称获取值,返回的是Object类型
            Object sname = rs.getObject(3);
            System.out.println("编号: "+sid+", 姓名: "+sname+", 成绩: "+score);
        }

        //5.关闭资源
        con.close();
        stmt.close();
        rs.close();
    }
}

/*

public class Demo05JDBC {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.jdbc.Driver");
        Connection connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/day18","root","root");

        Statement statement=connection.createStatement();
        String sql="select sid,sname,score from scores ";
        //ResultSet的实现类，返回集合对象，当作集合用
         ResultSet result=statement.executeQuery(sql);
         //只能查第一组数据
         if(result.next()){
          int sid=result.getInt(1);
          //按照上面查询数据，第二个是名字，所以不是分数不能用int接受，报错
          //int score=result.getInt(2);
          //String sname=result.getString(3);
             String sname=result.getString(2);
             int score=result.getInt(3);
             System.out.println("编号:"+sid+",分数:"+score+",名字:"+sname);
         }
         connection.close();
         statement.close();
         result.close();
    }
    @Test
    public  void queryAll() throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.jdbc.Driver");
        Connection connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/day18","root","root");

        Statement statement=connection.createStatement();
        String sql ="select * from  scores";
        ResultSet resultSet= statement.executeQuery(sql);
        //true
        //System.out.println(resultSet.next());
        while (resultSet.next()){
            //基础类对象，不用纠结表字段是啥类
          Object  score  =resultSet.getObject("score");
          Object  sid    =resultSet.getObject("sid");
          Object  sname= resultSet.getObject(3);

            System.out.println("编号:"+sid+",分数:"+score+",名字:"+sname);
         }
            connection.close();
            statement.close();
            resultSet.close();
    }
 }*/
